import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';

const prisma = new PrismaClient();

// 默认管理员账号配置
const DEFAULT_ADMIN = {
  username: 'admin',
  password: 'admin123',
  email: 'admin@example.com',
  nickname: '系统管理员'
};

async function initDefaultAdmin() {
  try {
    console.log('=== 初始化默认管理员账号 ===\n');

    // 检查是否已存在该用户名的管理员
    const existingAdmin = await prisma.admin.findUnique({
      where: { username: DEFAULT_ADMIN.username }
    });

    if (existingAdmin) {
      console.log(`⚠️  管理员账号 "${DEFAULT_ADMIN.username}" 已存在！`);
      console.log('正在更新密码...');
      
      // 更新现有管理员的密码
      const hashedPassword = await bcrypt.hash(DEFAULT_ADMIN.password, 10);
      
      const updatedAdmin = await prisma.admin.update({
        where: { username: DEFAULT_ADMIN.username },
        data: { 
          password: hashedPassword,
          status: true // 确保账号是启用状态
        }
      });
      
      console.log('✅ 管理员密码已更新！');
      console.log('\n登录信息：');
      console.log(`用户名: ${updatedAdmin.username}`);
      console.log(`密码: ${DEFAULT_ADMIN.password}`);
      console.log(`状态: ${updatedAdmin.status ? '启用' : '禁用'}`);
      
    } else {
      // 创建新的管理员
      console.log('正在创建默认管理员账号...');
      
      // 加密密码
      const hashedPassword = await bcrypt.hash(DEFAULT_ADMIN.password, 10);

      // 创建管理员
      const admin = await prisma.admin.create({
        data: {
          username: DEFAULT_ADMIN.username,
          password: hashedPassword,
          email: DEFAULT_ADMIN.email,
          nickname: DEFAULT_ADMIN.nickname,
          role: 'admin',
          status: true
        }
      });

      console.log('✅ 默认管理员账号创建成功！');
      console.log('\n管理员信息：');
      console.log(`ID: ${admin.id}`);
      console.log(`用户名: ${admin.username}`);
      console.log(`密码: ${DEFAULT_ADMIN.password}`);
      console.log(`邮箱: ${admin.email}`);
      console.log(`昵称: ${admin.nickname}`);
      console.log(`角色: ${admin.role}`);
      console.log(`状态: ${admin.status ? '启用' : '禁用'}`);
      console.log(`创建时间: ${admin.createdAt}`);
    }

    console.log('\n----------------------------------------');
    console.log('📌 请妥善保管以下登录信息：');
    console.log(`   用户名: ${DEFAULT_ADMIN.username}`);
    console.log(`   密码: ${DEFAULT_ADMIN.password}`);
    console.log('----------------------------------------\n');

  } catch (error) {
    console.error('❌ 操作失败:', error);
    
    // 更详细的错误信息
    if (error instanceof Error) {
      if (error.message.includes('connect')) {
        console.log('错误原因: 无法连接数据库');
        console.log('解决方案:');
        console.log('1. 检查数据库是否已启动');
        console.log('2. 检查 .env 文件中的 DATABASE_URL 配置是否正确');
        console.log('3. 确保数据库用户有足够的权限');
      } else if (error.message.includes('Table')) {
        console.log('错误原因: 数据库表不存在');
        console.log('解决方案: 请先运行 pnpm prisma migrate dev 创建数据库表');
      } else {
        console.log('错误详情:', error.message);
      }
    }
    
    process.exit(1);
  } finally {
    await prisma.$disconnect();
  }
}

// 运行脚本
if (require.main === module) {
  initDefaultAdmin();
}

export default initDefaultAdmin;